package config

import (
	"sync"

	"fyne.io/fyne/v2"
)

// Config 表示应用的配置
type Config struct {
	CorrectionEngine string `json:"correction_engine"`
	OpenAIKey        string `json:"openai_key"`
	DeepSeekKey      string `json:"deepseek_key"`
	ModelType        string `json:"model_type"`
	Token            string `json:"token"`
}

var (
	config      Config
	configMutex sync.Mutex
	appInstance fyne.App
)

// SetApp 设置应用实例，供配置模块使用
func SetApp(app fyne.App) {
	appInstance = app
	loadConfig()
}

// 初始化配置
func init() {
	// 延迟加载配置，直到appInstance被设置
	// 实际使用时，应用应该在启动后调用SetApp
}

// loadConfig 从Fyne Preferences加载配置
func loadConfig() {
	if appInstance == nil {
		// 如果应用实例未设置，使用默认配置
		config = Config{
			CorrectionEngine: "default",
			OpenAIKey:        "",
			DeepSeekKey:      "",
			ModelType:        "",
			Token:            "",
		}
		return
	}

	// 获取应用的首选项
	prefs := appInstance.Preferences()

	// 从首选项中加载配置
	config = Config{
		CorrectionEngine: prefs.String("correction_engine"),
		OpenAIKey:        prefs.String("openai_key"),
		DeepSeekKey:      prefs.String("deepseek_key"),
		ModelType:        prefs.String("model_type"),
		Token:            prefs.String("token"),
	}

	// 如果未设置CorrectionEngine，使用默认值
	if config.CorrectionEngine == "" {
		config.CorrectionEngine = "default"
		saveConfig()
	}
}

// saveConfig 保存配置到Fyne Preferences
func saveConfig() {
	if appInstance == nil {
		return
	}

	// 获取应用的首选项
	prefs := appInstance.Preferences()

	// 保存配置到首选项
	prefs.SetString("correction_engine", config.CorrectionEngine)
	prefs.SetString("openai_key", config.OpenAIKey)
	prefs.SetString("deepseek_key", config.DeepSeekKey)
	prefs.SetString("model_type", config.ModelType)
	prefs.SetString("token", config.Token)
}

// GetConfig 获取配置，会从存储中重新读取最新配置
func GetConfig() Config {
	configMutex.Lock()
	defer configMutex.Unlock()

	// 重新从存储中读取最新配置
	if appInstance != nil {
		loadConfig()
	}

	return config
}

// SetConfig 设置配置
func SetConfig(newConfig Config) {
	configMutex.Lock()
	defer configMutex.Unlock()

	config = newConfig
	saveConfig()
}
